package backtrack;
import java.util.*;
public class _10_491_非递减子序列 {
	List<List<Integer>> result = new ArrayList<>();
	List<Integer> item = new ArrayList<>();
	
    public List<List<Integer>> findSubsequences(int[] nums) {
    	backtracking(nums,0);
    	return result;
    }
    
    public void backtracking(int[] nums, int index) {
    	// 有2个以上的元素则保存
    	if(item.size() > 1) {
    		System.out.println(item);
    		result.add(new ArrayList<Integer>(item));
    	}
    	// 保存树层使用过的数字，如果该数字在本层使用过，则不再使用
    	Map<Integer,Integer> map = new HashMap<>();
    	for(int i = index ; i < nums.length; i++) {
    		// 当前值小于item的最后一个值，说明不符合，跳转到下一个元素
    		if(item.size() > 0 && nums[i] < item.get(item.size() - 1)) {
    			continue;
    		}
    		// 判断当前值在本树层是否用过，用过则不再使用，避免组合重复
    		if(map.get(nums[i]) != null) {
    			continue;
    		}
    		// 保存用过的值
    		map.put(nums[i], nums[i]);
    		item.add(nums[i]);
    		backtracking(nums, i + 1);
    		item.remove(item.size() - 1);
    	}
    	
    }

    public static void main(String[] args) {
    	int[] nums = {1,2,3,4,5,6,7,8,9,10,1,1,1,1,1};
    	new _10_491_非递减子序列().findSubsequences(nums);
	}
}
